/**
 * @description user controller
 * @author 刘煎蛋
 */

const {
    getUserInfo,
    createUser
} = require('../services/user');

const { 
    registerUserNameNotExistInfo,
    registerUserNameExistInfo,
    registerFailInfo,
    loginFailInfo
} = require('../model/ErrorInfo');

const { SuccessModel, ErrorModel } = require('../model/ResModel')

/**
 * 用户名是否存在
 * @param {string} userName 用户名
 */
async function isExist(userName) {
    const userInfo = await getUserInfo(userName)
    if (userInfo) {
        return new SuccessModel(userInfo)
    } else {
        return new ErrorModel(registerUserNameNotExistInfo)
    }
}

/**
 * 
 * @param {string} userName  用户名
 * @param {string} password  密码
 * @param {number} gender    性别
 */
async function register({ userName, password, gender }) {
    const userInfo = await getUserInfo(userName);

    // 如果用户已存在 直接返回已存在提示
    if ( userInfo ) {
        return new ErrorModel(registerUserNameExistInfo);
    }
    // 创建用户
    try {
        await createUser({
            userName,
            password,
            gender
        })
        return new SuccessModel({ msg: '注册成功' });
    } catch( ex ) {
        return new ErrorModel(registerFailInfo);
    }

}

/**
 * 
 * @param {*} ctx             实例
 * @param {string} userName   用户名 
 * @param {string} password   密码
 */
async function login( ctx, userName, password ) {
    const userInfo = await getUserInfo(userName, password);
    if ( !userInfo ) {
        return new ErrorModel(loginFailInfo);
    }
    
    if ( ctx.session.userInfo == null ) {
        ctx.session.userInfo = userInfo;
    }
    
    return new SuccessModel({ msg: '登录成功' });
}

module.exports = {
    register,
    login,
    isExist
}